/*
		内存空间函数——memcpy、memmove、memset、memcmp

		夏思成

		2024年3月31日

		西科大15号公寓楼
//*/
//
////memcpy函数的使用
//
//#include <stdio.h>
//#include <string.h>
//
//int main()
//{
//	int nums[] = { 1,2,3,4,5 };
//	int nums2[20] = { 0 };
//
//	memcpy(nums2, nums, sizeof(nums[0]) * 5);
//
//	int i = 0;
//	for (i = 0; i < 20; i++)
//	{
//		printf("%d ", nums2[i]);
//	}
//	return 0;
//}


////当源地址处的字节个数小于num的字节个数，memcpy不会停止复制，它会继续从该地址向后寻找，直到复制完num个字节
//
//#include <stdio.h>
//#include <string.h>
//
//int main()
//{
//	int nums[] = { 1,2,3,4 };
//	int nums2[20] = { 0 };
//
//	memcpy(nums2, nums, sizeof(nums[0]) * 5);
//
//	int i = 0;
//	for (i = 0; i < 20; i++)
//	{
//		printf("%d ", nums2[i]);
//	}
//	return 0;
//}


////memcpy函数的模拟实现
//
//#include <stdio.h>
//#include <string.h>
//#include <assert.h>
//
//void* my_memcpy(void* destination, const void* source, size_t num)
//{
//	assert(destination && source);
//
//	void* ret = destination;
//	while (num--)
//	{
//		*(char*)destination = *(char*)source;
//		destination = (char*)destination + 1;
//		source = (char*)source + 1;
//	}
//
//	return ret;
//}
//
//int main()
//{
//	int nums1[] = { 1,2,3,4,5 };
//	int nums2[20] = { 0 };
//
//	my_memcpy(nums2, nums1, sizeof(int) * 5);
//
//	int i = 0;
//	for (i = 0; i < 20; i++)
//	{
//		printf("%d ", nums2[i]);
//	}
//	return 0;
//}



//
////memmove函数的使用
//
//#include <stdio.h>
//#include <string.h>
//
//int main()
//{
//	char arr[] = "abcdef";
//
//	char* ret = (char*)memmove(arr+1, arr, sizeof(char) * 3);
//
//	printf("%s\n", ret);
//	return 0;
//}

//
////memmove函数的模拟实现
//
//#include <stdio.h>
//#include <assert.h>
//
//void* my_memmove(void* destination, const void* source, size_t num)
//{
//	assert(destination && source);
//
//	void* ret = destination;
//
//	//前->后
//	if (destination < source)
//	{
//		while (num--)
//		{
//			*(char*)destination = *(char*)source;
//			destination = (char*)destination + 1;
//			source = (char*)source + 1;
//		}
//	}
//	//后->前
//	else
//	{
//		while (num--)
//		{
//			*((char*)destination + num) = *((char*)source + num);
//		}
//	}
//	return ret;
//}
//
//int main()
//{
//	//char str[] = "abcdef";
//	int arr[] = { 1,2,3,4,5 };
//
//	//char *ret1 = (char*)my_memmove(str+1, str, sizeof(char) * 3);
//	char *ret2 = (char*)my_memmove(arr+1, arr, sizeof(int) * 3);
//
//	//printf("%s\n", ret1-1);
//
//	int i = 0;
//	for (i = 0; i < 5; i++)
//	{
//		printf("%d ", arr[i]);
//	}
//	return 0;
//}


//memset函数的使用
//
//#include <stdio.h>
//#include <string.h>
//
//int main()
//{
//	char arr[] = "hello world";
//
//	memset(arr, '1', 5);
//
//	printf("%s\n", arr);
//	return 0;
//}


//memcmp函数的使用

#include <stdio.h>
#include <string.h>

int main()
{
	int arr1[] = { 1,2,3 };
	int arr2[] = { 4,5,6 };

	int ret = memcmp(arr1, arr2, 1);

	printf("%d\n", ret);
	return 0;
}